entry: Fix a corner case of overwrite mode
authorMatthias Clasen <mclasen@redhat.com>
Wed, 5 Oct 2016 16:20:14 +0000 (12:20 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 5 Oct 2016 16:22:21 +0000 (12:22 -0400)
We currently beep when a character is appended at the end in
overwrite mode. That is obviously not right. Patch based on
a patch by Ian MacDonald.

https://bugzilla.gnome.org/show_bug.cgi?id=772389

gtk/gtkentry.c

index 79588a13a360ccd9965e28e487d2e623e1f57681..312277a3e976d29a37285eba4e107cbb7283c466 100644 (file)
@@ -6021,6 +6021,7 @@ gtk_entry_enter_text (GtkEntry       *entry,
   GtkEditable *editable = GTK_EDITABLE (entry);
   gint tmp_pos;
   gboolean old_need_im_reset;
+  guint text_length;
 
   old_need_im_reset = priv->need_im_reset;
   priv->need_im_reset = FALSE;
@@ -6030,7 +6031,11 @@ gtk_entry_enter_text (GtkEntry       *entry,
   else
     {
       if (priv->overwrite_mode)
-        gtk_entry_delete_from_cursor (entry, GTK_DELETE_CHARS, 1);
+        {
+          text_length = gtk_entry_buffer_get_length (get_buffer (entry));
+          if (priv->current_pos < text_length)
+            gtk_entry_delete_from_cursor (entry, GTK_DELETE_CHARS, 1);
+        }
     }
 
   tmp_pos = priv->current_pos;